package com.tony.jdbc.dynamic.service.impl;

import com.tony.jdbc.dynamic.service.ITransactionService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.function.Supplier;

/**
 * @author tony
 * @desc 事务接口实现类，默认使用spring事务
 * 注意事项：
 * 1.数据库操作不能在try catch中，否则事务无效。
 * 2.数据库操作不能在新创建的线程里执行，否则事务无效。
 * @date 2025/11/18
 */
@Service
public class TransactionServiceImpl implements ITransactionService {
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void execute(Runnable run) {
        run.run();
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public <T> T execute(Supplier<T> supplier) {
        return supplier.get();
    }
}
